import axios from "axios";

let baseURL = "";

if (process.env.NODE_ENV === 'development') {
    baseURL = '/api';
} else if (process.env.NODE_ENV === 'production') {
    baseURL = '/api';
}

let http = axios.create({
    timeout: 10000, // 设置超时时间10s
    baseURL
});

// 带cookie请求
http.defaults.withCredentials = true;

// 添加请求拦截器
http.interceptors.request.use(
    config => {
        //设置token
        // config.headers['token'] = sessionStorage.getItem('token') || '';

        // 在这里：可以根据业务需求可以在发送请求之前做些什么:例如我这个是导出文件的接口，因为返回的是二进制流，所以需要设置请求响应类型为blob，就可以在此处设置。
        // if (config.url.includes('file/export')) {
        //     config.headers['responseType'] = 'blob'
        // }
        // 我这里是文件上传，发送的是二进制流，所以需要设置请求头的'Content-Type'
        // if (config.url.includes('file/upload')) {
        //     config.headers['Content-Type'] = 'multipart/form-data'
        // }
        return config
    },
    error => {
        return Promise.reject(error);
    }
);

// 添加响应拦截器
http.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        if (error?.response) {
            const {response} = error;
            const {status, data:errorMessage, config, headers} = response;
            const {url} = config;


            return Promise.reject(errorMessage);
        } else {
            return Promise.reject(new Error('请求超时, 请刷新重试'))
        }

    }
);

/* 统一封装get请求 */
export const get = (url, params, config = {}) => {
    return http({
        method: 'get',
        url,
        params,
        ...config
    });
}

/* 统一封装post请求  */
export const post = (url, data, config = {}) => {
    return http({
        method: 'post',
        url,
        data,
        ...config
    });
}